package pers.jassor.service;

import java.util.List;

import org.springframework.stereotype.Component;

import feign.hystrix.FallbackFactory;
import pers.jassor.entities.Dept;

// Hystrix的fallbackfactory需要结合feign使用
@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>{

	
	// 服务熔断\服务降级 : 一种增强的异常处理机制
	// 熔断 : 作用于服务者端
	// 降级 : 作用于消费者端
	// 熔断的目的是服务者承载不住时避免服务者资源耗尽
	// 降级的目的是消费者得知服务者服务关闭后不再盲目请求和等待
	// 两者共同的目的都是避免雪崩现象
	
	@Override
	public DeptClientService create(Throwable cause) {
		
		// 当Fallback发生时调用此处的方法
		return new DeptClientService() {

			@Override
			public Dept get(Long id) {
				return new Dept()
						.setDeptno(id)
						.setDname("id不存在")
						.setDb_source("没有数据库");
			}

			@Override
			public List<Dept> list() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public boolean add(Dept dept) {
				// TODO Auto-generated method stub
				return false;
			}
			
		};
	}

}
